--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
RNS/Interfaces/util/netinfo.py ef9244f79fa35ec0b25d500080fe3583c6000d8b (ef9244f7) Text, 13.22 KB
T8b949e# MIT License
T8b949e#
T8b949e# Copyright (c) 2014 Stefan C. Mueller
T8b949e# Copyright (c) 2025 Mark Qvist
T8b949e#
T8b949e# Permission is hereby granted, free of charge, to any person obtaining a copy
T8b949e# of this software and associated documentation files (the "Software"), to deal
T8b949e# in the Software without restriction, including without limitation the rights
T8b949e# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
T8b949e# copies of the Software, and to permit persons to whom the Software is
T8b949e# furnished to do so, subject to the following conditions:
T8b949e#
T8b949e# The above copyright notice and this permission notice shall be included in all
T8b949e# copies or substantial portions of the Software.
T8b949e#
T8b949e# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
T8b949e# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
T8b949e# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
T8b949e# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
T8b949e# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
T8b949e# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
T8b949e# SOFTWARE.
Tff7b72import T7ee787os
Tff7b72import T7ee787socket
Tff7b72import T7ee787ipaddress
Tff7b72import T7ee787platform
Tff7b72import T7ee787ctypesT7ee787.T7ee787util
Tff7b72import T7ee787collections
Tff7b72from T7ee787typing Tff7b72import Te6edf3ListTb4b4b4, Te6edf3IterableTb4b4b4, Te6edf3OptionalTb4b4b4, Te6edf3TupleTb4b4b4, Te6edf3Union
Te6edf3AF_INET6 Tff7b72= Te6edf3socketTff7b72.Td2a8ffAF_INET6Tff7b72.Td2a8ffvalue
Te6edf3AF_INET Tff7b72= Te6edf3socketTff7b72.Td2a8ffAF_INETTff7b72.Td2a8ffvalue
Tff7b72def Td2a8ffinterfacesTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Te6edf3ListTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3adapters Tff7b72= Te6edf3get_adaptersTb4b4b4(Te6edf3include_unconfiguredTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Tb4b4b4[Te6edf3aTff7b72.Td2a8ffname Tff7b72for Te6edf3a Tff7b72in Te6edf3adaptersTb4b4b4]
Tff7b72def Td2a8ffinterface_names_to_indexesTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4:
Te6edf3adapters Tff7b72= Te6edf3get_adaptersTb4b4b4(Te6edf3include_unconfiguredTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3results Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72for Te6edf3adapter Tff7b72in Te6edf3adaptersTb4b4b4:
Te6edf3resultsTb4b4b4[Te6edf3adapterTff7b72.Td2a8ffnameTb4b4b4] Tff7b72= Te6edf3adapterTff7b72.Td2a8ffindex
Tff7b72return Te6edf3results
Tff7b72def Td2a8ffinterface_name_to_nice_nameTb4b4b4(Te6edf3ifnameTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3adapters Tff7b72= Te6edf3get_adaptersTb4b4b4(Te6edf3include_unconfiguredTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72for Te6edf3adapter Tff7b72in Te6edf3adaptersTb4b4b4:
Tff7b72if Te6edf3adapterTff7b72.Td2a8ffname Tff7b72== Te6edf3ifnameTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3adapterTb4b4b4, Ta5d6ff"Ta5d6ffnice_nameTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3adapterTff7b72.Td2a8ffnice_name
Tff7b72exceptTb4b4b4: Tff7b72return Tff7b72None
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffifaddressesTb4b4b4(Te6edf3ifnameTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4:
Te6edf3adapters Tff7b72= Te6edf3get_adaptersTb4b4b4(Te6edf3include_unconfiguredTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3ifa Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72for Te6edf3a Tff7b72in Te6edf3adaptersTb4b4b4:
Tff7b72if Te6edf3aTff7b72.Td2a8ffname Tff7b72== Te6edf3ifnameTb4b4b4:
Te6edf3ipv4s Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3ipv6s Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3ip Tff7b72in Te6edf3aTff7b72.Td2a8ffipsTb4b4b4:
Te6edf3t Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3ipTff7b72.Td2a8ffis_IPv4Tb4b4b4:
Te6edf3net Tff7b72= Te6edf3ipaddressTff7b72.Td2a8ffip_networkTb4b4b4(Tffa657strTb4b4b4(Te6edf3ipTff7b72.Td2a8ffipTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3ipTff7b72.Td2a8ffnetwork_prefixTb4b4b4)Tb4b4b4, Te6edf3strictTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6ffaddrTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3ipTff7b72.Td2a8ffip
Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6ffprefixTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3ipTff7b72.Td2a8ffnetwork_prefix
Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6ffbroadcastTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3netTff7b72.Td2a8ffbroadcast_addressTb4b4b4)
Te6edf3ipv4sTff7b72.Td2a8ffappendTb4b4b4(Te6edf3tTb4b4b4)
Tff7b72if Te6edf3ipTff7b72.Td2a8ffis_IPv6Tb4b4b4:
Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6ffaddrTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3ipTff7b72.Td2a8ffipTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3ipv6sTff7b72.Td2a8ffappendTb4b4b4(Te6edf3tTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3ipv4sTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4: Te6edf3ifaTb4b4b4[Te6edf3AF_INETTb4b4b4] Tff7b72= Te6edf3ipv4s
Tff7b72if Tffa657lenTb4b4b4(Te6edf3ipv6sTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4: Te6edf3ifaTb4b4b4[Te6edf3AF_INET6Tb4b4b4] Tff7b72= Te6edf3ipv6s
Tff7b72return Te6edf3ifa
Tff7b72def Td2a8ffget_adaptersTb4b4b4(Te6edf3include_unconfiguredTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffname Tff7b72== Ta5d6ff"Ta5d6ffposixTa5d6ff"Tb4b4b4: Tff7b72return Te6edf3_get_adapters_posixTb4b4b4(Te6edf3include_unconfiguredTff7b72=Te6edf3include_unconfiguredTb4b4b4)
Tff7b72elif Te6edf3osTff7b72.Td2a8ffname Tff7b72== Ta5d6ff"Ta5d6ffntTa5d6ff"Tb4b4b4: Tff7b72return Te6edf3_get_adapters_winTb4b4b4(Te6edf3include_unconfiguredTff7b72=Te6edf3include_unconfiguredTb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72raise Tf85149RuntimeErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUnsupported Operating System: Tffd700{Te6edf3osTff7b72.Td2a8ffnameTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72class T56d364AdapterTb4b4b4(Tffa657objectTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3nameTb4b4b4: Tffa657strTb4b4b4, Te6edf3nice_nameTb4b4b4: Tffa657strTb4b4b4, Te6edf3ipsTb4b4b4: Te6edf3ListTb4b4b4[Ta5d6ff"Ta5d6ffIPTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3indexTb4b4b4: Te6edf3OptionalTb4b4b4[Tffa657intTb4b4b4] Tff7b72= Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffname Tff7b72= Te6edf3name
Tff7b72selfTff7b72.Td2a8ffnice_name Tff7b72= Te6edf3nice_name
Tff7b72selfTff7b72.Td2a8ffips Tff7b72= Te6edf3ips
Tff7b72selfTff7b72.Td2a8ffindex Tff7b72= Te6edf3index
Tff7b72def Tff7b72__repr__Tb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffAdapter(name=Tffd700{name}Ta5d6ff, nice_name=Tffd700{nice_name}Ta5d6ff, ips=Tffd700{ips}Ta5d6ff, index=Tffd700{index}Ta5d6ff)Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(
Te6edf3nameTff7b72=Tffa657reprTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4, Te6edf3nice_nameTff7b72=Tffa657reprTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnice_nameTb4b4b4)Tb4b4b4, Te6edf3ipsTff7b72=Tffa657reprTb4b4b4(Tff7b72selfTff7b72.Td2a8ffipsTb4b4b4)Tb4b4b4, Te6edf3indexTff7b72=Tffa657reprTb4b4b4(Tff7b72selfTff7b72.Td2a8ffindexTb4b4b4)Tb4b4b4)
Te6edf3_IPv4Address Tff7b72= Tffa657str
Te6edf3_IPv6Address Tff7b72= Te6edf3TupleTb4b4b4[Tffa657strTb4b4b4, Tffa657intTb4b4b4, Tffa657intTb4b4b4]
Tff7b72class T56d364IPTb4b4b4(Tffa657objectTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3ipTb4b4b4: Te6edf3UnionTb4b4b4[Te6edf3_IPv4AddressTb4b4b4, Te6edf3_IPv6AddressTb4b4b4]Tb4b4b4, Te6edf3network_prefixTb4b4b4: Tffa657intTb4b4b4, Te6edf3nice_nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffip Tff7b72= Te6edf3ip
Tff7b72selfTff7b72.Td2a8ffnetwork_prefix Tff7b72= Te6edf3network_prefix
Tff7b72selfTff7b72.Td2a8ffnice_name Tff7b72= Te6edf3nice_name
Tf0883e@property
Tff7b72def Td2a8ffis_IPv4Tb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4: Tff7b72return Tff7b72not Tffa657isinstanceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffipTb4b4b4, Tffa657tupleTb4b4b4)
Tf0883e@property
Tff7b72def Td2a8ffis_IPv6Tb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4: Tff7b72return Tffa657isinstanceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffipTb4b4b4, Tffa657tupleTb4b4b4)
Tff7b72def Tff7b72__repr__Tb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffIP(ip=Tffd700{ip}Ta5d6ff, network_prefix=Tffd700{network_prefix}Ta5d6ff, nice_name=Tffd700{nice_name}Ta5d6ff)Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3ipTff7b72=Tffa657reprTb4b4b4(Tff7b72selfTff7b72.Td2a8ffipTb4b4b4)Tb4b4b4, Te6edf3network_prefixTff7b72=Tffa657reprTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnetwork_prefixTb4b4b4)Tb4b4b4, Te6edf3nice_nameTff7b72=Tffa657reprTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnice_nameTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3platformTff7b72.Td2a8ffsystemTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffDarwinTa5d6ff" Tff7b72or Ta5d6ff"Ta5d6ffBSDTa5d6ff" Tff7b72in Te6edf3platformTff7b72.Td2a8ffsystemTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72class T56d364sockaddrTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffStructureTb4b4b4)Tb4b4b4:
Te6edf3_fields_ Tff7b72= Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffsa_lenTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsa_familiyTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsa_dataTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8 Tff7b72* T79c0ff14Tb4b4b4)Tb4b4b4]
Tff7b72class T56d364sockaddr_inTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffStructureTb4b4b4)Tb4b4b4:
Te6edf3_fields_ Tff7b72= Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffsa_lenTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsa_familiyTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin_portTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint16Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin_addrTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8 Tff7b72* T79c0ff4Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin_zeroTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8 Tff7b72* T79c0ff8Tb4b4b4)Tb4b4b4]
Tff7b72class T56d364sockaddr_in6Tb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffStructureTb4b4b4)Tb4b4b4:
Te6edf3_fields_ Tff7b72= Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffsa_lenTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsa_familiyTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin6_portTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint16Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin6_flowinfoTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint32Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin6_addrTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8 Tff7b72* T79c0ff16Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin6_scope_idTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint32Tb4b4b4)Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72class T56d364sockaddrTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffStructureTb4b4b4)Tb4b4b4: T8b949e# type: ignore
Te6edf3_fields_ Tff7b72= Tb4b4b4[Tb4b4b4(Ta5d6ff"Ta5d6ffsa_familiyTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint16Tb4b4b4)Tb4b4b4, Tb4b4b4(Ta5d6ff"Ta5d6ffsa_dataTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8 Tff7b72* T79c0ff14Tb4b4b4)Tb4b4b4]
Tff7b72class T56d364sockaddr_inTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffStructureTb4b4b4)Tb4b4b4: T8b949e# type: ignore
Te6edf3_fields_ Tff7b72= Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffsin_familiyTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint16Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin_portTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint16Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin_addrTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8 Tff7b72* T79c0ff4Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin_zeroTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8 Tff7b72* T79c0ff8Tb4b4b4)Tb4b4b4]
Tff7b72class T56d364sockaddr_in6Tb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffStructureTb4b4b4)Tb4b4b4: T8b949e# type: ignore
Te6edf3_fields_ Tff7b72= Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffsin6_familiyTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint16Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin6_portTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint16Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin6_flowinfoTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint32Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin6_addrTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8 Tff7b72* T79c0ff16Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffsin6_scope_idTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint32Tb4b4b4)Tb4b4b4]
Tff7b72def Td2a8ffsockaddr_to_ipTb4b4b4(Te6edf3sockaddr_ptrTb4b4b4: Ta5d6ff"Ta5d6ffctypes.pointer[sockaddr]Ta5d6ff"Tb4b4b4) Tff7b72-Tff7b72> Te6edf3OptionalTb4b4b4[Te6edf3UnionTb4b4b4[Te6edf3_IPv4AddressTb4b4b4, Te6edf3_IPv6AddressTb4b4b4]Tb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3sockaddr_ptrTb4b4b4:
Tff7b72if Te6edf3sockaddr_ptrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffsa_familiy Tff7b72== Te6edf3socketTff7b72.Td2a8ffAF_INETTb4b4b4:
Te6edf3ipv4 Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffcastTb4b4b4(Te6edf3sockaddr_ptrTb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3sockaddr_inTb4b4b4)Tb4b4b4)
Te6edf3ippacked Tff7b72= Tffa657bytesTb4b4b4(Tffa657bytearrayTb4b4b4(Te6edf3ipv4Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffsin_addrTb4b4b4)Tb4b4b4)
Te6edf3ip Tff7b72= Tffa657strTb4b4b4(Te6edf3ipaddressTff7b72.Td2a8ffip_addressTb4b4b4(Te6edf3ippackedTb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3ip
Tff7b72elif Te6edf3sockaddr_ptrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffsa_familiy Tff7b72== Te6edf3socketTff7b72.Td2a8ffAF_INET6Tb4b4b4:
Te6edf3ipv6 Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffcastTb4b4b4(Te6edf3sockaddr_ptrTb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3sockaddr_in6Tb4b4b4)Tb4b4b4)
Te6edf3flowinfo Tff7b72= Te6edf3ipv6Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffsin6_flowinfo
Te6edf3ippacked Tff7b72= Tffa657bytesTb4b4b4(Tffa657bytearrayTb4b4b4(Te6edf3ipv6Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffsin6_addrTb4b4b4)Tb4b4b4)
Te6edf3ip Tff7b72= Tffa657strTb4b4b4(Te6edf3ipaddressTff7b72.Td2a8ffip_addressTb4b4b4(Te6edf3ippackedTb4b4b4)Tb4b4b4)
Te6edf3scope_id Tff7b72= Te6edf3ipv6Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffsin6_scope_id
Tff7b72return Tb4b4b4(Te6edf3ipTb4b4b4, Te6edf3flowinfoTb4b4b4, Te6edf3scope_idTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffipv6_prefixlengthTb4b4b4(Te6edf3addressTb4b4b4: Te6edf3ipaddressTff7b72.Td2a8ffIPv6AddressTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Te6edf3prefix_length Tff7b72= T79c0ff0
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3addressTff7b72.Td2a8ffmax_prefixlenTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657intTb4b4b4(Te6edf3addressTb4b4b4) Tff7b72>> Te6edf3i Tff7b72& T79c0ff1Tb4b4b4: Te6edf3prefix_length Tff7b72= Te6edf3prefix_length Tff7b72+ T79c0ff1
Tff7b72return Te6edf3prefix_length
Tff7b72if Te6edf3osTff7b72.Td2a8ffname Tff7b72== Ta5d6ff"Ta5d6ffposixTa5d6ff"Tb4b4b4:
Tff7b72class T56d364ifaddrsTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffStructureTb4b4b4)Tb4b4b4: Tff7b72pass
Te6edf3ifaddrsTff7b72.Td2a8ff_fields_ Tff7b72= Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffifa_nextTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3ifaddrsTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffifa_nameTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_char_pTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffifa_flagsTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uintTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffifa_addrTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3sockaddrTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffifa_netmaskTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3sockaddrTb4b4b4)Tb4b4b4)Tb4b4b4,Tb4b4b4]
Te6edf3libc Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffCDLLTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffutilTff7b72.Td2a8fffind_libraryTb4b4b4(Ta5d6ff"Ta5d6ffsocketTa5d6ff" Tff7b72if Te6edf3osTff7b72.Td2a8ffunameTb4b4b4(Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffSunOSTa5d6ff" Tff7b72else Ta5d6ff"Ta5d6ffcTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3use_errnoTff7b72=Tff7b72TrueTb4b4b4) T8b949e# type: ignore
Tff7b72def Td2a8ff_get_adapters_posixTb4b4b4(Te6edf3include_unconfiguredTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4) Tff7b72-Tff7b72> Te6edf3IterableTb4b4b4[Te6edf3AdapterTb4b4b4]Tb4b4b4:
Te6edf3addr0 Tff7b72= Te6edf3addr Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3ifaddrsTb4b4b4)Tb4b4b4(Tb4b4b4)
Te6edf3retval Tff7b72= Te6edf3libcTff7b72.Td2a8ffgetifaddrsTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffbyrefTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3retval Tff7b72!= T79c0ff0Tb4b4b4:
Te6edf3eno Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffget_errnoTb4b4b4(Tb4b4b4)
Tff7b72raise Tf85149OSErrorTb4b4b4(Te6edf3enoTb4b4b4, Te6edf3osTff7b72.Td2a8ffstrerrorTb4b4b4(Te6edf3enoTb4b4b4)Tb4b4b4)
Te6edf3ips Tff7b72= Te6edf3collectionsTff7b72.Td2a8ffOrderedDictTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffadd_ipTb4b4b4(Te6edf3adapter_nameTb4b4b4: Tffa657strTb4b4b4, Te6edf3ipTb4b4b4: Te6edf3OptionalTb4b4b4[Te6edf3IPTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3adapter_name Tff7b72not Tff7b72in Te6edf3ipsTb4b4b4:
Te6edf3index Tff7b72= Tff7b72None T8b949e# type: Optional[int]
Tff7b72tryTb4b4b4:
Te6edf3index Tff7b72= Te6edf3socketTff7b72.Td2a8ffif_nametoindexTb4b4b4(Te6edf3adapter_nameTb4b4b4) T8b949e# type: ignore
Tff7b72except Tb4b4b4(Tf85149OSErrorTb4b4b4, Tf85149AttributeErrorTb4b4b4)Tb4b4b4: Tff7b72pass
Te6edf3ipsTb4b4b4[Te6edf3adapter_nameTb4b4b4] Tff7b72= Te6edf3AdapterTb4b4b4(Te6edf3adapter_nameTb4b4b4, Te6edf3adapter_nameTb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3indexTff7b72=Te6edf3indexTb4b4b4)
Tff7b72if Te6edf3ip Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3ipsTb4b4b4[Te6edf3adapter_nameTb4b4b4]Tff7b72.Td2a8ffipsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3ipTb4b4b4)
Tff7b72while Te6edf3addrTb4b4b4:
Te6edf3name Tff7b72= Te6edf3addrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffifa_nameTff7b72.Td2a8ffdecodeTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffUTF-8Ta5d6ff"Tb4b4b4)
Te6edf3ip_addr Tff7b72= Te6edf3sockaddr_to_ipTb4b4b4(Te6edf3addrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffifa_addrTb4b4b4)
Tff7b72if Te6edf3ip_addrTb4b4b4:
Tff7b72if Te6edf3addrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffifa_netmask Tff7b72and Tff7b72not Te6edf3addrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffifa_netmaskTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffsa_familiyTb4b4b4:
Te6edf3addrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffifa_netmaskTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffsa_familiy Tff7b72= Te6edf3addrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffifa_addrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffsa_familiy
Te6edf3netmask Tff7b72= Te6edf3sockaddr_to_ipTb4b4b4(Te6edf3addrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffifa_netmaskTb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3netmaskTb4b4b4, Tffa657tupleTb4b4b4)Tb4b4b4:
Te6edf3netmaskStr Tff7b72= Tffa657strTb4b4b4(Te6edf3netmaskTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Te6edf3prefixlen Tff7b72= Te6edf3ipv6_prefixlengthTb4b4b4(Te6edf3ipaddressTff7b72.Td2a8ffIPv6AddressTb4b4b4(Te6edf3netmaskStrTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72assert Te6edf3netmask Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffsockaddr_to_ip(Tffd700{Te6edf3addrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffifa_netmaskTffd700}Ta5d6ff) returned NoneTa5d6ff"
Te6edf3netmaskStr Tff7b72= Tffa657strTb4b4b4(Ta5d6ff"Ta5d6ff0.0.0.0/Ta5d6ff" Tff7b72+ Te6edf3netmaskTb4b4b4)
Te6edf3prefixlen Tff7b72= Te6edf3ipaddressTff7b72.Td2a8ffIPv4NetworkTb4b4b4(Te6edf3netmaskStrTb4b4b4)Tff7b72.Td2a8ffprefixlen
Te6edf3ip Tff7b72= Te6edf3IPTb4b4b4(Te6edf3ip_addrTb4b4b4, Te6edf3prefixlenTb4b4b4, Te6edf3nameTb4b4b4)
Te6edf3add_ipTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3ipTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3include_unconfiguredTb4b4b4:
Te6edf3add_ipTb4b4b4(Te6edf3nameTb4b4b4, Tff7b72NoneTb4b4b4)
Te6edf3addr Tff7b72= Te6edf3addrTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffifa_next
Te6edf3libcTff7b72.Td2a8fffreeifaddrsTb4b4b4(Te6edf3addr0Tb4b4b4)
Tff7b72return Te6edf3ipsTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3osTff7b72.Td2a8ffname Tff7b72== Ta5d6ff"Ta5d6ffntTa5d6ff"Tb4b4b4:
Tff7b72from T7ee787ctypes Tff7b72import Te6edf3wintypes
Te6edf3NO_ERROR Tff7b72= T79c0ff0
Te6edf3ERROR_BUFFER_OVERFLOW Tff7b72= T79c0ff111
Te6edf3MAX_ADAPTER_NAME_LENGTH Tff7b72= T79c0ff256
Te6edf3MAX_ADAPTER_DESCRIPTION_LENGTH Tff7b72= T79c0ff128
Te6edf3MAX_ADAPTER_ADDRESS_LENGTH Tff7b72= T79c0ff8
Te6edf3AF_UNSPEC Tff7b72= T79c0ff0
Tff7b72class T56d364SOCKET_ADDRESSTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffStructureTb4b4b4)Tb4b4b4: Te6edf3_fields_ Tff7b72= Tb4b4b4[Tb4b4b4(Ta5d6ff"Ta5d6fflpSockaddrTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3sockaddrTb4b4b4)Tb4b4b4)Tb4b4b4, Tb4b4b4(Ta5d6ff"Ta5d6ffiSockaddrLengthTa5d6ff"Tb4b4b4, Te6edf3wintypesTff7b72.Td2a8ffINTTb4b4b4)Tb4b4b4]
Tff7b72class T56d364IP_ADAPTER_UNICAST_ADDRESSTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffStructureTb4b4b4)Tb4b4b4: Tff7b72pass
Te6edf3IP_ADAPTER_UNICAST_ADDRESSTff7b72.Td2a8ff_fields_ Tff7b72= Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffLengthTa5d6ff"Tb4b4b4, Te6edf3wintypesTff7b72.Td2a8ffULONGTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffFlagsTa5d6ff"Tb4b4b4, Te6edf3wintypesTff7b72.Td2a8ffDWORDTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffNextTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3IP_ADAPTER_UNICAST_ADDRESSTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffAddressTa5d6ff"Tb4b4b4, Te6edf3SOCKET_ADDRESSTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffPrefixOriginTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uintTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffSuffixOriginTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uintTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffDadStateTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uintTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffValidLifetimeTa5d6ff"Tb4b4b4, Te6edf3wintypesTff7b72.Td2a8ffULONGTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffPreferredLifetimeTa5d6ff"Tb4b4b4, Te6edf3wintypesTff7b72.Td2a8ffULONGTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffLeaseLifetimeTa5d6ff"Tb4b4b4, Te6edf3wintypesTff7b72.Td2a8ffULONGTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffOnLinkPrefixLengthTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_uint8Tb4b4b4)Tb4b4b4]
Tff7b72class T56d364IP_ADAPTER_ADDRESSESTb4b4b4(Te6edf3ctypesTff7b72.Td2a8ffStructureTb4b4b4)Tb4b4b4: Tff7b72pass
Te6edf3IP_ADAPTER_ADDRESSESTff7b72.Td2a8ff_fields_ Tff7b72= Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffLengthTa5d6ff"Tb4b4b4, Te6edf3wintypesTff7b72.Td2a8ffULONGTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffIfIndexTa5d6ff"Tb4b4b4, Te6edf3wintypesTff7b72.Td2a8ffDWORDTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffNextTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3IP_ADAPTER_ADDRESSESTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffAdapterNameTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_char_pTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffFirstUnicastAddressTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffPOINTERTb4b4b4(Te6edf3IP_ADAPTER_UNICAST_ADDRESSTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffFirstAnycastAddressTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_void_pTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffFirstMulticastAddressTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_void_pTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffFirstDnsServerAddressTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_void_pTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffDnsSuffixTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_wchar_pTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffDescriptionTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_wchar_pTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffFriendlyNameTa5d6ff"Tb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffc_wchar_pTb4b4b4)Tb4b4b4]
Te6edf3iphlpapi Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffwindllTff7b72.Td2a8ffLoadLibraryTb4b4b4(Ta5d6ff"Ta5d6ffIphlpapiTa5d6ff"Tb4b4b4) T8b949e# type: ignore
Tff7b72def Td2a8ff_enumerate_interfaces_of_adapter_winTb4b4b4(Te6edf3nice_nameTb4b4b4: Tffa657strTb4b4b4, Te6edf3addressTb4b4b4: Te6edf3IP_ADAPTER_UNICAST_ADDRESSTb4b4b4) Tff7b72-Tff7b72> Te6edf3IterableTb4b4b4[Te6edf3IPTb4b4b4]Tb4b4b4:
T8b949e# Iterate through linked list and fill list
Te6edf3addresses Tff7b72= Tb4b4b4[Tb4b4b4] T8b949e# type: List[IP_ADAPTER_UNICAST_ADDRESS]
Tff7b72while Tff7b72TrueTb4b4b4:
Te6edf3addressesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3addressTb4b4b4)
Tff7b72if Tff7b72not Te6edf3addressTff7b72.Td2a8ffNextTb4b4b4: Tff7b72break
Te6edf3address Tff7b72= Te6edf3addressTff7b72.Td2a8ffNextTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72for Te6edf3address Tff7b72in Te6edf3addressesTb4b4b4:
Te6edf3ip Tff7b72= Te6edf3sockaddr_to_ipTb4b4b4(Te6edf3addressTff7b72.Td2a8ffAddressTff7b72.Td2a8fflpSockaddrTb4b4b4)
Tff7b72assert Te6edf3ip Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffsockaddr_to_ip(Tffd700{Te6edf3addressTff7b72.Td2a8ffAddressTff7b72.Td2a8fflpSockaddrTffd700}Ta5d6ff) returned NoneTa5d6ff"
Te6edf3network_prefix Tff7b72= Te6edf3addressTff7b72.Td2a8ffOnLinkPrefixLength
Tff7b72yield Te6edf3IPTb4b4b4(Te6edf3ipTb4b4b4, Te6edf3network_prefixTb4b4b4, Te6edf3nice_nameTb4b4b4)
Tff7b72def Td2a8ff_get_adapters_winTb4b4b4(Te6edf3include_unconfiguredTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4) Tff7b72-Tff7b72> Te6edf3IterableTb4b4b4[Te6edf3AdapterTb4b4b4]Tb4b4b4:
Te6edf3addressbuffersize Tff7b72= Te6edf3wintypesTff7b72.Td2a8ffULONGTb4b4b4(T79c0ff15 Tff7b72* T79c0ff1024Tb4b4b4)
Te6edf3retval Tff7b72= Te6edf3ERROR_BUFFER_OVERFLOW
Tff7b72while Te6edf3retval Tff7b72== Te6edf3ERROR_BUFFER_OVERFLOWTb4b4b4:
Te6edf3addressbuffer Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffcreate_string_bufferTb4b4b4(Te6edf3addressbuffersizeTff7b72.Td2a8ffvalueTb4b4b4)
Te6edf3retval Tff7b72= Te6edf3iphlpapiTff7b72.Td2a8ffGetAdaptersAddressesTb4b4b4(
Te6edf3wintypesTff7b72.Td2a8ffULONGTb4b4b4(Te6edf3AF_UNSPECTb4b4b4)Tb4b4b4,
Te6edf3wintypesTff7b72.Td2a8ffULONGTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4,
Tff7b72NoneTb4b4b4,
Te6edf3ctypesTff7b72.Td2a8ffbyrefTb4b4b4(Te6edf3addressbufferTb4b4b4)Tb4b4b4,
Te6edf3ctypesTff7b72.Td2a8ffbyrefTb4b4b4(Te6edf3addressbuffersizeTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3retval Tff7b72!= Te6edf3NO_ERRORTb4b4b4:
Tff7b72raise Te6edf3ctypesTff7b72.Td2a8ffWinErrorTb4b4b4(Tb4b4b4) T8b949e# type: ignore
T8b949e# Iterate through adapters and fill array
Te6edf3address_infos Tff7b72= Tb4b4b4[Tb4b4b4] T8b949e# type: List[IP_ADAPTER_ADDRESSES]
Te6edf3address_info Tff7b72= Te6edf3IP_ADAPTER_ADDRESSESTff7b72.Td2a8fffrom_bufferTb4b4b4(Te6edf3addressbufferTb4b4b4)
Tff7b72while Tff7b72TrueTb4b4b4:
Te6edf3address_infosTff7b72.Td2a8ffappendTb4b4b4(Te6edf3address_infoTb4b4b4)
Tff7b72if Tff7b72not Te6edf3address_infoTff7b72.Td2a8ffNextTb4b4b4: Tff7b72break
Te6edf3address_info Tff7b72= Te6edf3address_infoTff7b72.Td2a8ffNextTb4b4b4[T79c0ff0Tb4b4b4]
T8b949e# Iterate through unicast addresses
Te6edf3result Tff7b72= Tb4b4b4[Tb4b4b4] T8b949e# type: List[Adapter]
Tff7b72for Te6edf3adapter_info Tff7b72in Te6edf3address_infosTb4b4b4:
Te6edf3name Tff7b72= Te6edf3adapter_infoTff7b72.Td2a8ffAdapterNameTff7b72.Td2a8ffdecodeTb4b4b4(Tb4b4b4)
Te6edf3nice_name Tff7b72= Te6edf3adapter_infoTff7b72.Td2a8ffDescription
Te6edf3index Tff7b72= Te6edf3adapter_infoTff7b72.Td2a8ffIfIndex
Tff7b72if Te6edf3adapter_infoTff7b72.Td2a8ffFirstUnicastAddressTb4b4b4:
Te6edf3ips Tff7b72= Te6edf3_enumerate_interfaces_of_adapter_winTb4b4b4(Te6edf3adapter_infoTff7b72.Td2a8ffFriendlyNameTb4b4b4, Te6edf3adapter_infoTff7b72.Td2a8ffFirstUnicastAddressTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Te6edf3ips Tff7b72= Tffa657listTb4b4b4(Te6edf3ipsTb4b4b4)
Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3AdapterTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3nice_nameTb4b4b4, Te6edf3ipsTb4b4b4, Te6edf3indexTff7b72=Te6edf3indexTb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3include_unconfiguredTb4b4b4: Te6edf3resultTff7b72.Td2a8ffappendTb4b4b4(Te6edf3AdapterTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3nice_nameTb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3indexTff7b72=Te6edf3indexTb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3result
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────